2.1 PPAC 信号处理-I

实验设置:

实验中,F8PPAC1-3测量靶前束流的入射方向。靶后两套望远镜系统(MUST2)测量反应产生的轻粒子,剩余重核由零度磁谱仪(ZDS)探测。为了减少散射粒子在靶内的能量损失,把靶框旋转45° 朝向望远镜摆放。靶前放置了厚铁块组成的屏蔽体,避免束流中偏离中心线的粒子达到靶后的探测系统。 setup

Delayline PPAC 信号定义:

  • $T_{delay}$: 信号在延迟线的总传播时间
  • 粒子在(x,y)位置穿过PPAC。原始电离产生的电子向阳极漂移过程中产生雪崩,在阳极以及X,Y阴极产生感应信号。
  • 阳极为一整块薄镀铝mylar膜,阳极时间信号$t_a$ 作为信号到达PPAC的时间。
  • 阴极分成1mm间隔的读数条(strips),每条之间通过延迟线连接。信号沿延迟线的两端传输,通过延迟线两端时间差给出x和y方向的位置。
    • 噪声干扰等可以在x或y的两端产生时间信号。为了避免上述干扰,一般要求x,y的两端信号和阳极信号有符合关系。

PPAC

$$ t_{x1}+t_{x2}=T_{delay} $$$$ t_{x1}= (\frac{L}{2}-x )\frac{T_{delay}}{L} $$$$ t_{x2}= (\frac{L}{2}+x )\frac{T_{delay}}{L} $$$$ x=(t_{x2}-t_{x1})\frac{L}{2T_{delay}} $$

PPAC postion calibration

  • 放射源置于远处,将$\alpha$粒子入射到盖有Mask的探测器上(Mask上孔的位置分布已知), 得到x方向和y方向的一系列峰位。由此可以得到x,y方向位置刻度的线性系数,$k=L/2T_{delay}$
  • 探测器安装到束流线后,通过位置测量,确定探测器中心相对于束流中心线的偏移b。
    • 实验中,测量通过中心线的束流(限制束流线上的slit(狭缝)的位置)的位置,进一步检验和校准上述偏移。 TDC

两种类型PPAC:

实验中采用了两种不同规格尺寸的 PPAC

  • 一种是double PPAC(F8PPAC1, F8PPAC2), 面积为 $240 × 150 mm^2$
  • 另一种是single PPAC(F8PPAC3), 面积为 $100 × 100 mm^2$。

    setup

文件中TreeBranch的定义:

  • Trigger = beamTrig + must2Trig
    • beamTrig=1,由靶前plastic scin.探测器触发(束流的取样触发)。
    • must2Trig=1,由靶后Must2望远镜信号触发
  • F8PPACRawData[i][j] -Raw Data(原始信息,道值)
Branch PPAC
F8PPACRawData[0][0] PPAC 1 Layer A $T_{x1}$
F8PPACRawData[0][1] PPAC 1 Layer A $T_{x2}$
F8PPACRawData[0][2] PPAC 1 Layer A $T_{y1}$
F8PPACRawData[0][3] PPAC 1 Layer A $T_{y2}$
F8PPACRawData[0][4] PPAC 1 Layer A $T_a$
F8PPACRawData[1][0-4] PPAC 1 Layer B
F8PPACRawData[2][0-4] PPAC 2 Layer A
F8PPACRawData[3][0-4] PPAC 2 Layer B
F8PPACRawData[4][0-4] PPAC 3

PPAC 信号分析

  • Trigger(time start): Plastic scintillator
  • 飞行距离 D:plastic to PPAC
  • 阴极,阳极信号的offset: $t_{o1},t_{o2},t_{oa}$
  • TDC记录的时间信号:$T_{x1},T_{x2},T_a$

阴极时间 ($v$-dependence)

  • $ T_{x1}=D/v+t_{x1}+t_{o1} $
  • $ T_{x2}=D/v+t_{x2}+t_{o2} $
  • $ T_{x1}+T_{x2}=2D/v+T_{delay}+(t_{o1}+t_{o1})$
  • $T_{xl}-T_{x2}=t_{x1}-t_{x2}+(t_{o1}-t_{o2})$

阳极时间

  • $T_{a}=D/v+t_{oa}$

组合参数 (no $v$-dependence)

上述时间信号不仅与感应信号在探测器中的传输时间相关,也与束流的到达时间(飞行时间)有关。 研究探测器的信号特征时,我们希望得到只和探测器性能有关的参数,此时参数的变化规律只与探测器特性有关,与束流的到达时间无关。

  • $ dt_{x1}=T_{x1}-T_a=t_{x1}+(t_{o1}+t_{oa})$
  • $dt_{x2}=T_{x2}-T_a=t_{x2}+(t_{o2}+t_{oa})$
  • $dt_{xl}-dt_{x1}=t_{x1}-t_{x2}+(t_{o1}-t_{o2})$
  • $dt_{x1}+dt_{x2}=t_{x1}+t_{x2}+(t_{o1}+t_{o2}-2t_{oa})$=Const.
In [1]:
%jsroot on
TFile *ipf=new TFile("f8ppac001.root");//  $HOME/data/MUST2@BigRIPS/ROOTFILE/
TTree *tree=(TTree*) ipf->Get("tree");
TCanvas *c1=new TCanvas("c1","c1");
In [2]:
tree->Draw("F8PPACRawData[0][0]>>hx1(1000,0,4200)");//F8PPAC1A-Tx1
tree->Draw("F8PPACRawData[0][1]>>hx2(1000,0,4200)");//F8PPAC1A-Tx2
TH1D *hx1=(TH1D*)gROOT->FindObject("hx1");
TH1D *hx2=(TH1D*)gROOT->FindObject("hx2");
hx1->SetLineColor(kBlue);
hx2->SetLineColor(kBlack);
hx1->Draw();
hx2->Draw("same");
c1->SetLogy();
c1->Draw();
In [3]:
tree->Draw("F8PPACRawData[0][2]>>hy1(1000,0,4200)");//F8PPAC1A-Ty1
tree->Draw("F8PPACRawData[0][3]>>hy2(1000,0,4200)");//F8PPAC1A-Ty2
TH1D *hy1=(TH1D*)gROOT->FindObject("hy1");
TH1D *hy2=(TH1D*)gROOT->FindObject("hy2");
hy1->SetLineColor(kBlue);
hy2->SetLineColor(kBlack);
hy1->Draw();
hy2->Draw("same");
c1->SetLogy();
c1->Draw();
In [4]:
tree->Draw("F8PPACRawData[0][4]>>ha(1000,0,4200)");//F8PPAC1A-Ta
ha->Draw();
c1->Draw();

选取时间信号的范围

  • x1,x2:0-1700
  • y1,y2: 0-1400
  • anode: 200-600
  • 每个位置信号都需要有符合的阳极信号。
  • 上述范围外的时间信号为偶然符合或异常信号。
In [5]:
TCut ca="Ta>200 && Ta<600";
  TCut cx1="Tx1>0 && Tx1<1700" && ca;
  TCut cx2="Tx2>0 && Tx2<1700" && ca;
  TCut cy1="Ty1>0 && Ty1<1400" && ca;
  TCut cy2="Ty2>0 && Ty2<1400" && ca;

  TCut cppac=cx1 && cx2 && cy1 && cy2;
In [6]:
// F8PPAC
  tree->SetAlias("Tx1","F8PPACRawData[0][0]");//F8PPAC1A-txl
  tree->SetAlias("Tx2","F8PPACRawData[0][1]");//F8PPAC1A-txr
  tree->SetAlias("Ty1","F8PPACRawData[0][2]");//F8PPAC1A-tyu
  tree->SetAlias("Ty2","F8PPACRawData[0][3]");//F8PPAC1A-tyd
  tree->SetAlias("Ta","F8PPACRawData[0][4]");//F8PPAC1A-Anode

  tree->SetAlias("dtx1","Tx1-Ta");
  tree->SetAlias("dtx2","Tx2-Ta");
  tree->SetAlias("dty1","Ty1-Ta");
  tree->SetAlias("dty2","Ty2-Ta");
In [7]:
tree->Draw("dtx1>>hdx1(1600,-100,1500)",cx1);
tree->Draw("dtx2>>hdx2(1600,-100,1500)",cx2);
TH1D *hdx1=(TH1D*)gROOT->FindObject("hdx1");
TH1D *hdx2=(TH1D*)gROOT->FindObject("hdx2");
hdx1->SetLineColor(kBlue);
hdx2->SetLineColor(kBlack);
hdx1->Draw();
hdx2->Draw("same");
c1->SetLogy();
c1->Draw();
c1->Draw();
In [8]:
tree->Draw("dtx1-dtx2>>(1500,-1500,1500)",cx1 && cx2);
c1->SetLogy();
c1->Draw();

探测器两端信号关联

  • $ T_{x1}+T_{x2}=2D/v+T_{delay}+(t_{o1}+t_{o1})$=$2D/v+Const.$ - 与束流速度有关

  • $dt_{x1}+dt_{x2}=t_{x1}+t_{x2}+(t_{o1}+t_{o2}-2t_{oa})$=$Const.$ - 与束流速度无关

In [9]:
tree->Draw("Tx1:Tx2>>(1000,0,2500,1000,0,2500)",cx1 && cx1,"colz");
gStyle->SetPalette(1);
c1->SetLogy(0);
c1->Draw();
In [10]:
tree->Draw("dtx1:dtx2>>(1600,-100,1500,1600,-100,1500)",cx1 && cx2 && ca,"colz");
gStyle->SetPalette(1);
c1->Draw();

Pileup Cut

在束流比较强的时候,需要考虑堆积(Pileup)事件的排除。堆积是由于同时有多个粒子打在PPAC上,造成delayline的x的两端的时间不是由同一个粒子给出的。

  • 假设a,b粒子同时穿过探测器,a粒子靠近x1侧,b粒子靠近x2侧,则$T_{x1}$对应于a粒子,$T_{x2}$对应于b粒子(TDC只记录与start信号最近的信号)。此时$T_{x1}+T_{x2}<T_{delay}$。即delayline的两端信号传输时间和不再是常数。这个条件可作为信号堆积的标志。

  • 从上述讨论可知,PPAC不产生堆积的条件是,每个粒子的时间间隔应该大于$T_{delay}$ multihit

In [11]:
tree->Draw("dtx1+dtx2>>hdxt(1200,400,1600)",cx1 && cx2);
hdxt->Fit("gaus","","",1130,1190);
gPad->SetLogy();
hdxt->Draw();
c1->Draw();
 FCN=15624.4 FROM MIGRAD    STATUS=CONVERGED      85 CALLS          86 TOTAL
                     EDM=1.2371e-09    STRATEGY= 1      ERROR MATRIX ACCURATE 
  EXT PARAMETER                                   STEP         FIRST   
  NO.   NAME      VALUE            ERROR          SIZE      DERIVATIVE 
   1  Constant     3.12561e+04   5.57675e+01   2.47378e+00   2.77442e-07
   2  Mean         1.17205e+03   1.02913e-02   6.25846e-04   9.58468e-04
   3  Sigma        7.66373e+00   1.00156e-02   1.83885e-05   1.37639e-01
In [12]:
TF1 *fx=hdxt->GetFunction("gaus");
Double_t xpeak=fx->GetParameter(1);
Double_t xsigma=fx->GetParameter(2);
cout<<xpeak+3*xsigma<<endl;
1195.04
In [13]:
tree->Draw("dty1+dty2>>hdyt(1200,0,1200)",cy1 && cy2 && ca);
hdyt->Fit("gaus","","",600,680);
gPad->SetLogy();
hdyt->Draw();
c1->Draw();
 FCN=22519.4 FROM MIGRAD    STATUS=CONVERGED      66 CALLS          67 TOTAL
                     EDM=4.28416e-11    STRATEGY= 1  ERROR MATRIX UNCERTAINTY   2.2 per cent
  EXT PARAMETER                                   STEP         FIRST   
  NO.   NAME      VALUE            ERROR          SIZE      DERIVATIVE 
   1  Constant     2.70976e+04   4.89759e+01  -8.84731e-03  -1.22718e-07
   2  Mean         6.61676e+02   1.21685e-02   7.31839e-06   8.75846e-04
   3  Sigma        8.42012e+00   1.14851e-02  -1.19840e-07  -3.02993e-02
In [14]:
TF1 *fy=hdyt->GetFunction("gaus");
Double_t ypeak=fy->GetParameter(1);
Double_t ysigma=fy->GetParameter(2);
In [15]:
TString spileup;
spileup.Form("abs(dtx1+dtx2-%f)<3*%f",xpeak,xsigma);
TCut cxpileup=spileup.Data();
spileup.Form("abs(dty1+dty2-%f)<3*%f",ypeak,ysigma);
TCut cypileup=spileup.Data();
TCut cpileup=cxpileup && cypileup;
  • $ T_{x1}+T_{x2}=2D/v+T_{delay}+(t_{o1}+t_{o1})$
  • $T_{a}=D/v+t_{oa}$
In [16]:
tree->Draw("(Tx1+Tx2)/2:Ta>>(100,250,550,200,400,1400)",cppac,"colz");
gPad->SetLogy(0);
gPad->SetLogz();
c1->Draw();
In [17]:
tree->Draw("(Tx1+Tx2)/2:Ta>>(100,250,550,200,400,1400)",cppac&&cpileup,"colz");
gPad->SetLogy(0);
gPad->SetLogz();
c1->Draw();
In [18]:
tree->Draw("dty1-dty2:dtx1-dtx2",cppac&&cpileup,"colz");
gPad->SetLogy(0);
c1->Draw();
In [ ]: